/*******************************************************************************
 * $Header: /home/cvsroot/develop/workspace/base/com.ease.java/src/com/ease/system/utility/impl/ResourceLoadHelper.java,v 1.1 2012/09/26 16:17:28 liwei Exp $
 * $Revision: 1.1 $
 * $Date: 2012/09/26 16:17:28 $
 *
 *==============================================================================
 *
 * Copyright (c) 2001-2006 Primeton Technologies, Ltd.
 * All rights reserved.
 *
 * Created on 2007-7-19
 *******************************************************************************/

package com.ease.aa.system.utility.impl;

import java.io.IOException;
import java.util.HashMap;
import java.util.Locale;
import java.util.Map;
import java.util.Properties;

import com.ease.aa.system.utility.UrlUtil;
import com.ease.context.i18n.ResourceMessageUtil;

/**
 * 
 * 资源装载工具类
 * 
 * @author nathanleewei
 */

public class ResourceLoadHelper {

	/**
	 * 装载properties.
	 * 
	 * @param fileName
	 *            the file name
	 * @param locale
	 *            the locale
	 * 
	 * @return the properties
	 */
	public static Properties loadResourceProperties(String resource) {
		Properties prop = new Properties();

		if (resource != null) {
			java.io.InputStream stream = null;
			try {
				stream = UrlUtil.getURL(resource, ResourceLoadHelper.class.getClassLoader()).openStream();
				prop.load(stream);
			} catch (Throwable ignore) {
				// log.warn("[interresource={0}] cannot load!", new
				// Object[]{localFileName}, ignore);
			} finally {
				if (stream != null) {
					try {
						stream.close();
					} catch (IOException ignore) {
					}
				}
			}
		}
		return prop;
	}

	/**
	 * 取得资源所对应的Locale
	 * 
	 * @param resource
	 *            资源
	 * @return 所对应的Locale
	 */
	public static Locale getResourceLoacle(String resource) {
		if (resource == null) {
			return ResourceMessageUtil.EOS_DEFAULT_LOCALE;
		}
		int index = resource.lastIndexOf('.');
		String localFileName = resource;
		// 去掉文件扩展名
		if (index != -1) {
			localFileName = resource.substring(0, index);
		}
		index = localFileName.lastIndexOf('_');
		// 查找语言后缀标识 XXX_en类型
		if (index != -1) {
			String sufix = localFileName.substring(index + 1);
			Locale locale = getLocale(sufix);
			if (locale != null) {
				return locale;
			} else {
				// 去掉最后那个下划线
				String prefix = localFileName.substring(0, index);
				index = prefix.lastIndexOf('_');
				// 查找语言后缀标识 XXX_zh_CN类型
				if (index != -1) {
					sufix = localFileName.substring(index + 1);
					locale = getLocale(sufix);
					if (locale != null) {
						return locale;
					} else {
						// 去掉倒数第二个那个下划线
						prefix = prefix.substring(0, index);
						index = prefix.lastIndexOf('_');
						// 查找语言后缀标识 XXX_zh_CN_HK类型
						if (index != -1) {
							sufix = localFileName.substring(index + 1);
							locale = getLocale(sufix);
							if (locale != null) {
								return locale;
							}
						}
					}
				}
			}
		}

		return ResourceMessageUtil.EOS_DEFAULT_LOCALE;
	}

	/**
	 * 取得Locale对象
	 * 
	 * @param locale
	 *            Locale字符串
	 * @return Locale对象
	 */
	public static Locale getLocale(String locale) {
		return language_country_enum.get(locale == null ? "" : locale.toLowerCase());
	}

	static Map<String, Locale> language_country_enum = new HashMap<String, Locale>();

	// 初始化国际化信息
	static {

		for (Locale locale : Locale.getAvailableLocales()) {
			language_country_enum.put(locale.toString().toLowerCase(), locale);
		}
	}
}
/*
 * 修改历史 $Log: ResourceLoadHelper.java,v $ 修改历史 Revision 1.1 2012/09/26 16:17:28 liwei 修改历史 init 修改历史 修改历史 Revision 1.1
 * 2012/09/09 10:16:53 liwei 修改历史 init 修改历史 修改历史 Revision 1.1 2012/09/09 09:32:25 liwei 修改历史 init 修改历史 修改历史 Revision 1.1
 * 2012/09/07 05:52:00 liwei 修改历史 init 修改历史 修改历史 Revision 1.1 2012/05/30 09:56:29 liwei 修改历史 *** empty log message ***
 * 修改历史 修改历史 Revision 1.5 2012/03/19 17:42:30 liwei 修改历史 init 修改历史 修改历史 Revision 1.4 2012/03/13 20:24:08 liwei 修改历史 init
 * 修改历史 修改历史 Revision 1.3 2012/03/13 17:17:04 liwei 修改历史 init 修改历史 修改历史 Revision 1.2 2012/03/01 06:28:11 liwei 修改历史 init
 * 修改历史 修改历史 Revision 1.1 2012/02/28 07:13:16 liwei 修改历史 init 修改历史 Revision 1.1 2011/06/02 09:23:24 wangfeng 迁移项目
 * 
 * Revision 1.1 2010/01/26 01:35:29 wanglei Add:迁移6.1CVS到6.2CVS上
 * 
 * Revision 1.1 2009/11/18 07:11:15 wanglei Add:提交到CVS。
 * 
 * Revision 1.5 2008/09/10 03:15:04 liuxiang BUG: 12644 [wuyh]license控制数据库类型,提示信息不统一
 * 
 * Revision 1.4 2008/07/28 03:21:32 wangcq JIRA：EOS-2480 国际化资源自动搜索功
 * 
 * Revision 1.3 2008/07/24 08:02:11 wangcq BUG：10521 EOS异常国际化资源文件加载有问题
 * 
 * Revision 1.2 2008/07/23 06:12:43 wuyh BUG:10440 异常资源文件加载不成功
 * 
 * Revision 1.1 2008/07/04 11:55:16 build Added by Needle,Sxn,Sccot
 * 
 * Revision 1.1 2008/05/07 09:03:31 wuyh JIRA：EOS-1056 ,异常处理需要统一考虑国际化等特殊问题
 * 
 * Revision 1.2 2008/05/06 09:00:21 wuyh JIRA：EOS-1056 ,异常处理需要统一考虑国际化等特殊问题
 * 
 * Revision 1.1 2007/12/24 09:09:08 wuyh Update:国际化资源注册移动到通用工具模块
 * 
 * Revision 1.2 2007/12/04 09:08:14 wuyh Update:增加跟踪日志
 * 
 * Revision 1.1 2007/11/16 09:09:33 wuyh Update;修改包依赖
 * 
 * Revision 1.1 2007/09/15 07:21:32 wuyh Update:server包名重构
 * 
 * Revision 1.5 2007/08/15 05:45:23 wangfeng Update: comment system.out(localfileName is not exist)
 * 
 * Revision 1.4 2007/08/01 06:15:28 wuyh Update:增加文件名称不区分大小写判断
 * 
 * Revision 1.3 2007/07/20 04:26:16 wuyh Update:优化搜索算法
 * 
 * Revision 1.2 2007/07/20 01:04:06 wuyh Update:修改日志和异常
 * 
 * Revision 1.1 2007/07/19 11:29:49 wuyh Add:新建
 */